﻿using System;
using System.Windows.Forms;
using Company.BLL;
using Company.BLL.DuLieuChuan;
using Janus.Windows.GridEX;
using Company.Interface.KDT.GC.PCTFormTemplate;
using Company.BLL.KDT.GC;
using Company.BLL.KDT;

namespace Company.Interface.KDT.GC
{
    public partial class PhuKienGCSendForm : BaseForm
    {
        public HopDong hopdong = new HopDong();
        public PhuKienDangKy phukien = new PhuKienDangKy();        
        public PhuKienDangKyCollection pkDangKyCollection = new PhuKienDangKyCollection();
        private bool isUpdate=false;
        //-----------------------------------------------------------------------------------------
        public PhuKienGCSendForm()
        {
            InitializeComponent();
            createLoaiPhuKien();
            phukien.TrangThaiXuLy = TrangThaiXuLy.CHUA_KHAI_BAO;
            phukien.SoTiepNhan = 0;
            phukien.NgayTiepNhan = new DateTime(1900, 1, 1);
            hopdong = new HopDong();
            this.ctrDonViHaiQuan.ValueChanged -= new Company.Interface.Controls.DonViHaiQuanControl.ValueChangedEventHandler(this.ctrDonViHaiQuan_ValueChanged);
            cbHopDong.ValueChanged -= new System.EventHandler(this.cbHopDong_ValueChanged);                           
        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Khởi tạo dữ liệu chuẩn.
        /// </summary>
        private void khoitao_DuLieuChuan()
        {
            this._DonViHaiQuan = DonViHaiQuan.SelectAll();
            this._DonViTinh = DonViTinh.SelectAll();
            bindHopDong();
        }
        private void bindHopDong()
        {
            cbHopDong.DataSource = Company.BLL.KDT.GC.HopDong.SelectDynamic("MaHaiQuan='" + ctrDonViHaiQuan.Ma + "'", "NgayKy DESC").Tables[0];
            cbHopDong.DisplayMember = "SoHopDong";
            cbHopDong.ValueMember = "ID";
            cbHopDong.Text = "";
        }
        //-----------------------------------------------------------------------------------------
        private void PhuKienGCSendForm_Load(object sender, EventArgs e)
        {
            this.khoitao_DuLieuChuan();
            HuyKhaiBao1.Enabled = Janus.Windows.UI.InheritableBoolean.False;     
            if (hopdong!=null && hopdong.ID>0)
            {
                ctrDonViHaiQuan.Ma = hopdong.MaHaiQuan;
                bindHopDong();
                cbHopDong.Value = hopdong.ID;                
                ctrDonViHaiQuan.ReadOnly = true;
                cbHopDong.ReadOnly = true;
                if (phukien.SoPhuKien != "")
                {
                    pkDangKyCollection = PhuKienDangKy.SelectCollectionBy_HopDong_IDANDSoPhuKienANDNgayPhuKien(hopdong.ID, phukien.SoPhuKien, phukien.NgayPhuKien);
                    txtSoPhuKien.Text = phukien.SoPhuKien.Trim();
                    ccNgayPhuKien.Value = phukien.NgayPhuKien;
                    foreach (PhuKienDangKy k in pkDangKyCollection)
                    {
                        phukien.TrangThaiXuLy = k.TrangThaiXuLy;
                        phukien.SoTiepNhan = k.SoTiepNhan;
                        phukien.NgayTiepNhan = k.NgayTiepNhan;
                        txtSoTiepNhan.Text = k.SoTiepNhan.ToString();
                        k.PKCollection = PhuKien.SelectCollectionBy_Master_ID(k.ID);
                    }
                    if (phukien.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET)
                    {
                        cmdAddNew1.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                        cmdSave1.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                        cmdSend1.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                        HuyKhaiBao1.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                        NhanDuLieuPK.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                        lblTrangThai.Text = "Đã duyệt";
                    }
                    else if (phukien.TrangThaiXuLy == TrangThaiXuLy.CHO_DUYET)
                    {
                        lblTrangThai.Text = "Chờ duyệt";
                        HuyKhaiBao1.Enabled = Janus.Windows.UI.InheritableBoolean.True;
                    }
                    else
                    {
                        HuyKhaiBao1.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                        NhanDuLieuPK.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                    }
                }
            }
            this.ctrDonViHaiQuan.ValueChanged += new Company.Interface.Controls.DonViHaiQuanControl.ValueChangedEventHandler(this.ctrDonViHaiQuan_ValueChanged);
            cbHopDong.ValueChanged += new System.EventHandler(this.cbHopDong_ValueChanged);                           
            dgList.DataSource = pkDangKyCollection;
            //dgList.DataSource = this.dmDangKy.DMCollection;
        }
        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Khởi tạo thông tin về loại phụ kiện.
        /// </summary>
        private void createLoaiPhuKien()
        {
            cbLoaiPhuKien.DataSource = Company.BLL.DuLieuChuan.LoaiPhuKien.SelectAll();
            cbLoaiPhuKien.DisplayMember = "TenLoaiPhuKien";
            cbLoaiPhuKien.ValueMember = "ID_LoaiPhuKien";
        }
        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Gửi thông tin đăng ký đến Hải quan.
        /// </summary>
        private void send()
        {
            if (pkDangKyCollection.Count == 0)
            {
                ShowMessage("Chưa khai báo phụ kiện", false);
                return;
            }
            phukien = pkDangKyCollection[0];
            HopDong hd = HopDong.Load(phukien.HopDong_ID);
            if (!(hd.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET))
            {
                ShowMessage("Hợp đồng chưa được duyệt. Không được gửi phụ kiện ", false);
                return;
            }
            if (phukien.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET)
            {
                ShowMessage("Phụ kiện đã được duyệt", false);
                return;
            }
            foreach (PhuKienDangKy pkdk1 in this.pkDangKyCollection)
            {
                phukien = pkdk1;
                if (pkdk1.ID == 0)
                {
                    ShowMessage("Phải lưu trữ phụ kiện trước", false);
                    return;
                }
            }
          

            WSForm wsForm = new WSForm();
            wsForm.ShowDialog(this);
            if (!wsForm.IsReady) return;
            try
            {
                this.Cursor = Cursors.WaitCursor;
                phukien.WSSend();
                txtSoTiepNhan.Text = phukien.SoTiepNhan.ToString();
                lblTrangThai.Text = "Chờ duyệt";
                pkDangKyCollection = PhuKienDangKy.SelectCollectionBy_HopDong_IDANDSoPhuKienANDNgayPhuKien(pkDangKyCollection[0].HopDong_ID, pkDangKyCollection[0].SoPhuKien, pkDangKyCollection[0].NgayPhuKien);
                this.Cursor = Cursors.Default;
                ShowMessage("Đã gửi thành công. Số tiếp nhận :"+txtSoTiepNhan.Text, false);            
            }
            catch (Exception ex)
            {
                if (ex.Message == "1")
                    ShowMessage("Hợp đồng này đã được duyệt chính thức trên hải quan", false);
                else
                    if (ShowMessage("Gửi dữ liệu phụ kiện không thành công.\nLỗi: " + ex.Message + ".\nBạn có muốn đưa vào hàng đợi không?", true) == "Yes")
                    {
                        HangDoi hangdoi = new HangDoi();
                        hangdoi.ID = phukien.ID;
                        hangdoi.LoaiToKhai = LoaiToKhai.PHU_KIEN;
                        hangdoi.TrangThai = phukien.TrangThaiXuLy;
                        hangdoi.ChucNang = ChucNang.NHAN_THONG_TIN;
                        MainForm.AddToQueueForm(hangdoi);
                        MainForm.ShowQueueForm();
                    }
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
            //try
            //{
            //    this.Cursor = Cursors.WaitCursor;
            //    if (this.dmDangKy.DMCollection.Count > 0)
            //    {
            //        // Master.
            //        this.dmDangKy.MaHaiQuan = ctrDonViHaiQuan.Ma;
            //        this.dmDangKy.MaDoanhNghiep = GlobalSettings.MA_DON_VI;
            //        this.dmDangKy.MaDaiLy = GlobalSettings.MA_DAI_LY;
            //        string returnMessage = string.Empty;
            //        this.dmDangKy.WSSend();
            //        txtSoTiepNhan.Text = this.dmDangKy.SoTiepNhan.ToString();
            //        lblTrangThai.Text = "Chờ duyệt chính thức";
            //        cmdSend.Enabled = Janus.Windows.UI.InheritableBoolean.False;
            //        cmdSave.Enabled = Janus.Windows.UI.InheritableBoolean.False;
            //        cmdAdd.Enabled = Janus.Windows.UI.InheritableBoolean.False;
            //        ShowMessage("Đăng ký thành công!\nSố tiếp nhận đăng ký điện tử: " + this.dmDangKy.SoTiepNhan.ToString(), false);
            //    }
            //}
            //catch (Exception ex)
            //{
            //    MessageBox.Show(ex.Message);
            //}
            //finally
            //{
            //    this.Cursor = Cursors.Default;
            ////}
            //HopDong hd = HopDong.Load(cbHopDong.Value.ToString());
            //Company.BLL.GC.PhuKienCollection pkCollectionduyet = new Company.BLL.GC.PhuKienCollection();
            //foreach (PhuKienDangKy p in pkDangKyCollection)
            //{
            //    p.PKCollection = PhuKien.SelectCollectionBy_Master_ID(p.ID);
            //    foreach (PhuKien p2 in p.PKCollection)
            //    {
            //        Company.BLL.GC.PhuKien pkduyet = new Company.BLL.GC.PhuKien();
            //        pkduyet.MaDoanhNghiep = GlobalSettings.MA_DON_VI;
            //        pkduyet.MaHaiQuan = hd.MaHaiQuan;
            //        pkduyet.NgayKy = hd.NgayKy;
            //        pkduyet.SoHopDong = hd.SoHopDong;
            //        pkduyet.SoPhuKien = p.SoPhuKien;
            //        pkduyet.NgayPhuKien = p.NgayPhuKien;
            //        pkduyet.MaPhuKien = p.MaPhuKien;
            //        pkduyet.NoiDung = p.NoiDung;
            //        pkduyet.VBCP = p.VBCP;
            //        pkduyet.GhiChu = p.GhiChu;
            //        pkduyet.ThongTinMoi = p.ThongTinMoi;
            //        pkduyet.MaDaiLy = p.MaDaiLy;
            //        pkduyet.MaHang = p2.MaHang;
            //        pkduyet.TenHang = p2.TenHang;
            //        pkduyet.MaHS = p2.MaHS;
            //        pkduyet.SoLuong = p2.SoLuong;
            //        pkduyet.DonGia = p2.DonGia;
            //        pkduyet.DVT_ID = p2.DVT_ID;
            //        pkduyet.NuocXX_ID = p2.NuocXX_ID;
            //        pkduyet.TriGia = p2.TriGia;
            //        pkduyet.STTHang = p2.STTHang;
            //        pkduyet.TinhTrang = p2.TinhTrang;
            //        pkduyet.NhomSP = p2.NhomSP;
            //        pkduyet.ThongTinCu = p.ThongTinCu;
            //        pkduyet.ThongTinCuHang = p2.ThongTinCu;
            //        pkduyet.NguyenTe = p2.NguyenTe;
            //        pkCollectionduyet.Add(pkduyet);
            //    }
            //    if (p.PKCollection.Count == 0)
            //    {
            //        Company.BLL.GC.PhuKien pkduyet = new Company.BLL.GC.PhuKien();
            //        pkduyet.MaDoanhNghiep = GlobalSettings.MA_DON_VI;
            //        pkduyet.MaHaiQuan = hd.MaHaiQuan;
            //        pkduyet.NgayKy = hd.NgayKy;
            //        pkduyet.SoHopDong = hd.SoHopDong;
            //        pkduyet.SoPhuKien = p.SoPhuKien;
            //        pkduyet.NgayPhuKien = p.NgayPhuKien;
            //        pkduyet.MaPhuKien = p.MaPhuKien;
            //        pkduyet.NoiDung = p.NoiDung;
            //        pkduyet.VBCP = p.VBCP;
            //        pkduyet.GhiChu = p.GhiChu;
            //        pkduyet.ThongTinMoi = p.ThongTinMoi;
            //        pkduyet.MaDaiLy = p.MaDaiLy;
            //        pkCollectionduyet.Add(pkduyet);
            //    }
            //}
            //bool kq = (new Company.BLL.GC.PhuKien()).Insert(pkCollectionduyet);
            
        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Thêm mới phụ kiện.
        /// </summary>
        private void add()
        {
            cvError.Validate();
            if (!cvError.IsValid) return;          
            string id_loaiphukien = cbLoaiPhuKien.Value.ToString();

            switch (id_loaiphukien.Trim())
            {
                case "H06": { showPKGiaHanHD(true);} break;
                case "H10": { showPKHuyHD(true); } break;
                case "H11": { showPKMoPhuKienDocLap(true); } break;
                case "N01": { showPKBoSungNPL(true); } break;
                case "N05": { showPKDieuChinhSoLuongNPL(true); } break;
                case "N06": { showPKDieuChinhDVTNPL(true); } break;
                case "N11": { showPKBoSungNPLVietNam(true); } break;
                case "S06": { showPKDieuChinhDVTSP(true); } break;
                case "S10": { showPKDieuChinhMaSP(true); } break;
                case "S13": { showPKDieuChinhChiTietMaSP(true); } break;
                case "S15": { showPKDieuChinhNhomSP(true); } break;
                case "T01": { showPKDieuChinhThietBi(true); } break;
                case "T07": { showPKBoSungThietBi(true); } break;
            }
        }

        //-----------------------------------------------------------------------------------------
        private void ctrDonViHaiQuan_ValueChanged(object sender, EventArgs e)
        {
            if(pkDangKyCollection.Count>0)
            {
                foreach(PhuKienDangKy pkdk1 in pkDangKyCollection)            
                {
                    if (pkdk1.ID == 0)
                    {
                        DialogResult d = MessageBox.Show("Bạn có muốn lưu lại thông tin đã nhập không", "Lưu thông tin", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information);
                        if (d == DialogResult.Yes)
                        {
                            save();
                            Reset();
                            bindHopDong();
                            hopdong = null;
                            return;
                        }
                        else if (d == DialogResult.No)
                        {
                            Reset();
                            bindHopDong();
                            hopdong = null;
                            return;
                        }
                        else
                        {
                            this.ctrDonViHaiQuan.ValueChanged -= new Company.Interface.Controls.DonViHaiQuanControl.ValueChangedEventHandler(this.ctrDonViHaiQuan_ValueChanged);
                            ctrDonViHaiQuan.Ma = hopdong.MaHaiQuan;
                            this.ctrDonViHaiQuan.ValueChanged += new Company.Interface.Controls.DonViHaiQuanControl.ValueChangedEventHandler(this.ctrDonViHaiQuan_ValueChanged);
                            return;
                        }
                    }
                    foreach (PhuKien pk in pkdk1.PKCollection)
                    {
                        if(pk.ID==0)
                        {
                            DialogResult d = MessageBox.Show("Bạn có muốn lưu lại thông tin đã nhập không", "Lưu thông tin", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information);
                            if (d == DialogResult.Yes)
                            {
                                save();
                                Reset();
                                bindHopDong();
                                hopdong = null;
                                return;

                            }
                            else if (d == DialogResult.No)
                            {
                                Reset();
                                bindHopDong();
                                hopdong = null;
                                return;
                            }
                            else
                            {
                                this.ctrDonViHaiQuan.ValueChanged -= new Company.Interface.Controls.DonViHaiQuanControl.ValueChangedEventHandler(this.ctrDonViHaiQuan_ValueChanged);
                                ctrDonViHaiQuan.Ma = hopdong.MaHaiQuan;
                                this.ctrDonViHaiQuan.ValueChanged += new Company.Interface.Controls.DonViHaiQuanControl.ValueChangedEventHandler(this.ctrDonViHaiQuan_ValueChanged);
                                return;
                            }
                        }
                    }
                }
            }
            bindHopDong();
            hopdong = null;
        }

        //-----------------------------------------------------------------------------------------
        private void dgList_LoadingRow(object sender, RowLoadEventArgs e)
        {
            if (e.Row.RowType == RowType.Record)
            {
                e.Row.Cells["TenPhuKien"].Text = this.LoaiPhuKien_GetName(e.Row.Cells["MaPhuKien"].Value.ToString().Trim());
            }
        }

        //-----------------------------------------------------------------------------------------
        private void dgList_RowDoubleClick(object sender, RowActionEventArgs e)
        {            
            string id_loaiphukien = e.Row.Cells[1].Text.Trim();
            switch (id_loaiphukien.Trim())
            {
                case "H06": { showPKGiaHanHD(false); } break;
                case "H10": { showPKHuyHD(false); } break;
                case "H11": { showPKMoPhuKienDocLap(false); } break;
                case "N01": { showPKBoSungNPL(false); } break;
                case "N05": { showPKDieuChinhSoLuongNPL(false); } break;
                case "N06": { showPKDieuChinhDVTNPL(false); } break;
                case "N11": { showPKBoSungNPLVietNam(false); } break;
                case "S06": { showPKDieuChinhDVTSP(false); } break;
                case "S10": { showPKDieuChinhMaSP(false); } break;
                case "S13": { showPKDieuChinhChiTietMaSP(false); } break;
                case "S15": { showPKDieuChinhNhomSP(false); } break;
                case "T01": { showPKDieuChinhThietBi(false); } break;
                case "T07": { showPKBoSungThietBi(false); } break;
            }
        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Lưu thông tin.
        /// </summary>
        private void save()
        {
            if (pkDangKyCollection.Count > 0)
            {
                if (pkDangKyCollection[0].TrangThaiXuLy == TrangThaiXuLy.DA_DUYET)
                {
                    ShowMessage("Phụ kiện đã được duyệt. Không thể cập nhật", false);
                    return;
                }
            }
            else
            {
                ShowMessage("Chưa có phụ kiện.", false);
                return;
            }
            try
            {
                this.Cursor = Cursors.WaitCursor;
                if (this.pkDangKyCollection.Count > 0)
                {
                    
                    // Detail.                    
                    foreach (PhuKienDangKy pkdk1 in this.pkDangKyCollection)
                    {
                        int sttHang = 1;
                        foreach(PhuKien pk in pkdk1.PKCollection)                        
                        pk.STTHang = sttHang++;
                    }

                    if (PhuKienDangKy.InsertUpdate(pkDangKyCollection))
                    {
                        ShowMessage("Cập nhật thành công", false);
                        phukien.SoTiepNhan = pkDangKyCollection[0].SoTiepNhan;
                        phukien.TrangThaiXuLy = pkDangKyCollection[0].TrangThaiXuLy;
                        phukien.NgayTiepNhan = pkDangKyCollection[0].NgayTiepNhan;
                    }
                    else
                        ShowMessage("Cập nhật không thành công", false);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi:" + ex.Message);
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }        
        }

        private bool EditSoPhuKien()
        {
            if (pkDangKyCollection.Count > 0 && pkDangKyCollection[0].SoPhuKien == txtSoPhuKien.Text.Trim())
                return true;
            PhuKienDangKy pkCheckSoPhuKien = new PhuKienDangKy();
            if (pkCheckSoPhuKien.checkExitsSoPhuKien(txtSoPhuKien.Text.Trim()))
            {
                ShowMessage("Số phụ kiện này đã có", false);
                txtSoPhuKien.Focus();
                return false;
            }
            foreach (PhuKienDangKy p in pkDangKyCollection)
            {                               
                p.SoPhuKien = txtSoPhuKien.Text.Trim();
            }
            return true;
        }
        //-----------------------------------------------------------------------------------------
        private void cmMain_CommandClick(object sender, Janus.Windows.UI.CommandBars.CommandEventArgs e)
        {
            try
            {
                hopdong = HopDong.Load((long)Convert.ToInt64(cbHopDong.Value.ToString()));
            }
            catch { hopdong = null; ShowMessage("Không tồn tại hợp đồng này",false); return; }
            if (!EditSoPhuKien())
                return;

            switch (e.Command.Key)
            {
                case "cmdSave":
                    this.save();
                    break;
                case "cmdAdd":
                    this.add();
                    break;
                case "cmdSend":
                    this.send();
                    break;
                case "HuyKhaiBao":
                    this.Huy();
                    break;
                case "NhanDuLieuPK":
                    this.NhanDuLieuPK12();
                    break;
            }
        }
        public void NhanDuLieuPK12()
        {
            phukien = pkDangKyCollection[0];
            if (phukien.TrangThaiXuLy == TrangThaiXuLy.CHUA_KHAI_BAO)
            {
                ShowMessage("Phụ kiện chưa được khai báo", false);
                return;
            }
            else if (phukien.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET)
            {
                ShowMessage("Phụ kiện đã được khai báo", false);
                return;
            }
            WSForm wsForm = new WSForm();
            wsForm.ShowDialog(this);
            if (!wsForm.IsReady) return;
            try
            {                
                this.Cursor = Cursors.WaitCursor;
                phukien.WSRequest();
                this.Cursor = Cursors.Default;
                if (phukien.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET)
                {
                    pkDangKyCollection = PhuKienDangKy.SelectCollectionBy_HopDong_IDANDSoPhuKienANDNgayPhuKien(pkDangKyCollection[0].HopDong_ID, pkDangKyCollection[0].SoPhuKien, pkDangKyCollection[0].NgayPhuKien);                    
                    lblTrangThai.Text = "Đã duyệt";                    
                    ShowMessage("Phụ kiện đã được duyệt", false);
                }
                else
                    ShowMessage("Phụ kiện chưa được duyệt", false);

            }
            catch (Exception ex)
            {
                this.Cursor = Cursors.WaitCursor;
                if (ex.Message == "1")
                    ShowMessage("Phụ kiện này đã được duyệt chính thức trên hải quan", false);
                else
                    if (ShowMessage("Nhận dữ liệu phụ kiện không thành công.\nLỗi: " + ex.Message + ".\nBạn có muốn đưa vào hàng đợi không?", true) == "Yes")
                    {
                        HangDoi hangdoi = new HangDoi();
                        hangdoi.ID = phukien.ID;
                        hangdoi.LoaiToKhai = LoaiToKhai.PHU_KIEN;
                        hangdoi.TrangThai = phukien.TrangThaiXuLy;
                        hangdoi.ChucNang = ChucNang.NHAN_THONG_TIN;
                        MainForm.AddToQueueForm(hangdoi);
                        MainForm.ShowQueueForm();
                    }
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }
        public void Huy()
        {
            if(pkDangKyCollection.Count>0)
                phukien = pkDangKyCollection[0];
            if (phukien.TrangThaiXuLy == TrangThaiXuLy.DA_DUYET)
            {
                ShowMessage("Phụ kiện đã được duyệt", false);
                return;
            }
            WSForm wsForm = new WSForm();
            wsForm.ShowDialog(this);
            if (!wsForm.IsReady) return;
            try
            {
                this.Cursor = Cursors.WaitCursor;
                phukien.WSCancel();
                pkDangKyCollection = PhuKienDangKy.SelectCollectionBy_HopDong_IDANDSoPhuKienANDNgayPhuKien(pkDangKyCollection[0].HopDong_ID, pkDangKyCollection[0].SoPhuKien, pkDangKyCollection[0].NgayPhuKien);
                txtSoTiepNhan.Text = phukien.SoTiepNhan.ToString();
                lblTrangThai.Text = "Chưa khai báo";
                this.Cursor = Cursors.Default;
                ShowMessage("Phụ kiện đã được hủy trên hải quan", false);
       
            }
            catch (Exception ex)
            {
                if (ex.Message == "1")
                    ShowMessage("Hợp đồng này đã được duyệt chính thức trên hải quan", false);
                else
                    if (ShowMessage("Hủy dữ liệu phụ kiện không thành công.\nLỗi: " + ex.Message + ".\nBạn có muốn đưa vào hàng đợi không?", true) == "Yes")
                    {
                        HangDoi hangdoi = new HangDoi();
                        hangdoi.ID = phukien.ID;
                        hangdoi.LoaiToKhai = LoaiToKhai.PHU_KIEN;
                        hangdoi.TrangThai = phukien.TrangThaiXuLy;
                        hangdoi.ChucNang = ChucNang.NHAN_THONG_TIN;
                        MainForm.AddToQueueForm(hangdoi);
                        MainForm.ShowQueueForm();
                    }
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }
        private void showPKGiaHanHD(bool isAdd)
        {            
            PKGiahanHDForm f = new PKGiahanHDForm();
            PhuKienDangKy pkdk = null;
            foreach (PhuKienDangKy pk in pkDangKyCollection)
            {
                if (pk.MaPhuKien.Trim() == "H06")
                {
                    pkdk = pk; isAdd = false; break;
                }
            }
            f.hopdong = hopdong;
            if (isAdd)
            {
                pkdk = new PhuKienDangKy();
                pkdk.HopDong_ID = hopdong.ID;
                pkdk.SoPhuKien = txtSoPhuKien.Text.Trim();
                pkdk.NgayPhuKien = ccNgayPhuKien.Value;
                pkdk.MaPhuKien = "H06";
                pkdk.SoTiepNhan = phukien.SoTiepNhan;
                pkdk.TrangThaiXuLy = phukien.TrangThaiXuLy;
                pkdk.NgayTiepNhan = phukien.NgayTiepNhan;
            }          
            f.pkdk = pkdk;
            f.isAdd = isAdd;
            f.ShowDialog();
            if (f.isAdd)
            {
                pkDangKyCollection.Add(pkdk);
            }
            dgList.Refetch();
        }

        private void showPKHuyHD(bool isAdd)
        {
            HuyHopDongForm f = new HuyHopDongForm();
            f.hopdong = hopdong;
            PhuKienDangKy pkdk = null;
            foreach (PhuKienDangKy pk in pkDangKyCollection)
            {
                if (pk.MaPhuKien.Trim() == "H10")
                {
                    pkdk = pk; isAdd = false; break;
                }
            }
            if (isAdd)
            {
                pkdk = new PhuKienDangKy();
                pkdk.HopDong_ID = hopdong.ID;
                pkdk.SoPhuKien = txtSoPhuKien.Text.Trim();
                pkdk.NgayPhuKien = ccNgayPhuKien.Value;
                pkdk.MaPhuKien = "H10";
                pkdk.SoTiepNhan = phukien.SoTiepNhan;
                pkdk.TrangThaiXuLy = phukien.TrangThaiXuLy;
                pkdk.NgayTiepNhan = phukien.NgayTiepNhan;
            }
            f.pkdk = pkdk;
            f.isAdd = isAdd;
            f.ShowDialog();
            if (f.isAdd)
            {
                pkDangKyCollection.Add(pkdk);
            }
            dgList.Refetch();
        }
        private void showPKMoPhuKienDocLap(bool isAdd)
        {
            MoPhuKienDocLapForm f = new MoPhuKienDocLapForm();
            f.hopdong = hopdong;
            PhuKienDangKy pkdk = null;
            foreach (PhuKienDangKy pk in pkDangKyCollection)
            {
                if (pk.MaPhuKien.Trim() == "H11")
                {
                    pkdk = pk; isAdd = false; break;
                }
            }
            if (isAdd)
            {
                pkdk = new PhuKienDangKy();
                pkdk.HopDong_ID = hopdong.ID;
                pkdk.SoPhuKien = txtSoPhuKien.Text.Trim();
                pkdk.NgayPhuKien = ccNgayPhuKien.Value;
                pkdk.MaPhuKien = "H11";
                pkdk.SoTiepNhan = phukien.SoTiepNhan;
                pkdk.TrangThaiXuLy = phukien.TrangThaiXuLy;
                pkdk.NgayTiepNhan = phukien.NgayTiepNhan;
            }
            f.pkdk = pkdk;
            f.isAdd = isAdd;
            f.ShowDialog();
            if (f.isAdd)
            {
                pkDangKyCollection.Add(pkdk);
            }
            dgList.Refetch();
        }
        private void showPKBoSungNPL(bool isAdd)
        {
            BoSungNPLForm f = new BoSungNPLForm();
            f.hopdong = hopdong; 
            PhuKienDangKy pkdk = null;
            foreach (PhuKienDangKy pk in pkDangKyCollection)
            {
                if (pk.MaPhuKien.Trim() == "N01")
                {
                    pkdk = pk; isAdd = false; break;
                }
            }
            if (isAdd)
            {
                pkdk = new PhuKienDangKy();
                pkdk.HopDong_ID = hopdong.ID;
                pkdk.SoPhuKien = txtSoPhuKien.Text.Trim();
                pkdk.NgayPhuKien = ccNgayPhuKien.Value;
                pkdk.MaPhuKien = "N01";
                pkdk.SoTiepNhan = phukien.SoTiepNhan;
                pkdk.TrangThaiXuLy = phukien.TrangThaiXuLy;
                pkdk.NgayTiepNhan = phukien.NgayTiepNhan;
            }
            f.pkdk = pkdk;
            f.isAdd = isAdd;
            f.ShowDialog();
            if (f.isAdd)
            {
                pkDangKyCollection.Add(pkdk);
            }
            dgList.Refetch();
        }
        private void showPKDieuChinhSoLuongNPL(bool isAdd)
        {
            DieuChinhSoLuongNPLForm f = new DieuChinhSoLuongNPLForm();
            f.hopdong = hopdong;
            PhuKienDangKy pkdk = null;
            foreach (PhuKienDangKy pk in pkDangKyCollection)
            {
                if (pk.MaPhuKien.Trim() == "N05")
                {
                    pkdk = pk; isAdd = false; break;
                }
            }
            if (isAdd)
            {
                pkdk = new PhuKienDangKy();
                pkdk.HopDong_ID = hopdong.ID;
                pkdk.SoPhuKien = txtSoPhuKien.Text.Trim();
                pkdk.NgayPhuKien = ccNgayPhuKien.Value;
                pkdk.MaPhuKien = "N05";
                pkdk.SoTiepNhan = phukien.SoTiepNhan;
                pkdk.TrangThaiXuLy = phukien.TrangThaiXuLy;
                pkdk.NgayTiepNhan = phukien.NgayTiepNhan;
            }
            f.pkdk = pkdk;
            f.isAdd = isAdd;
            f.ShowDialog();
            if (f.isAdd)
            {
                pkDangKyCollection.Add(pkdk);
            }
            dgList.Refetch();
        }
        private void showPKDieuChinhDVTNPL(bool isAdd)
        {
            DieuChinhDonViTinhNPLForm f = new DieuChinhDonViTinhNPLForm();
            f.hopdong = hopdong;
            PhuKienDangKy pkdk = null;
            foreach (PhuKienDangKy pk in pkDangKyCollection)
            {
                if (pk.MaPhuKien.Trim() == "N06")
                {
                    pkdk = pk; isAdd = false; break;
                }
            }
            if (isAdd)
            {
                pkdk = new PhuKienDangKy();
                pkdk.HopDong_ID = hopdong.ID;
                pkdk.SoPhuKien = txtSoPhuKien.Text.Trim();
                pkdk.NgayPhuKien = ccNgayPhuKien.Value;
                pkdk.MaPhuKien = "N06";
                pkdk.SoTiepNhan = phukien.SoTiepNhan;
                pkdk.TrangThaiXuLy = phukien.TrangThaiXuLy;
                pkdk.NgayTiepNhan = phukien.NgayTiepNhan;
            }
            f.pkdk = pkdk;
            f.isAdd = isAdd;
            f.ShowDialog();
            if (f.isAdd)
            {
                pkDangKyCollection.Add(pkdk);
            }
            dgList.Refetch();
        }
        private void showPKBoSungNPLVietNam(bool isAdd)
        {
            BoSungNPLVNForm f = new BoSungNPLVNForm();
            f.hopdong = hopdong;
            PhuKienDangKy pkdk = null;
            foreach (PhuKienDangKy pk in pkDangKyCollection)
            {
                if (pk.MaPhuKien.Trim() == "N11")
                {
                    pkdk = pk; isAdd = false; break;
                }
            }
            if (isAdd)
            {
                pkdk = new PhuKienDangKy();
                pkdk.HopDong_ID = hopdong.ID;
                pkdk.SoPhuKien = txtSoPhuKien.Text.Trim();
                pkdk.NgayPhuKien = ccNgayPhuKien.Value;
                pkdk.MaPhuKien = "N11";
                pkdk.SoTiepNhan = phukien.SoTiepNhan;
                pkdk.TrangThaiXuLy = phukien.TrangThaiXuLy;
                pkdk.NgayTiepNhan = phukien.NgayTiepNhan;
            }
            f.pkdk = pkdk;
            f.isAdd = isAdd;
            f.ShowDialog();
            if (f.isAdd)
            {
                pkDangKyCollection.Add(pkdk);
            }
            dgList.Refetch();
        }
        private void showPKDieuChinhDVTSP(bool isAdd)
        {
            PKThayDoiDVTSPForm f = new PKThayDoiDVTSPForm();
            f.hopdong = hopdong;
            PhuKienDangKy pkdk = null;
            foreach (PhuKienDangKy pk in pkDangKyCollection)
            {
                if (pk.MaPhuKien.Trim() == "S06")
                {
                    pkdk = pk; isAdd = false; break;
                }
            }
            if (isAdd)
            {
                pkdk = new PhuKienDangKy();
                pkdk.HopDong_ID = hopdong.ID;
                pkdk.SoPhuKien = txtSoPhuKien.Text.Trim();
                pkdk.NgayPhuKien = ccNgayPhuKien.Value;
                pkdk.MaPhuKien = "S06";
                pkdk.SoTiepNhan = phukien.SoTiepNhan;
                pkdk.TrangThaiXuLy = phukien.TrangThaiXuLy;
                pkdk.NgayTiepNhan = phukien.NgayTiepNhan;
            }
            f.pkdk = pkdk;
            f.isAdd = isAdd;
            f.ShowDialog();
            if (f.isAdd)
            {
                pkDangKyCollection.Add(pkdk);
            }
            dgList.Refetch();
        }
        private void showPKDieuChinhMaSP(bool isAdd)
        {
            PKDieuChinhMaSPForm f = new PKDieuChinhMaSPForm();
            f.hopdong = hopdong;
            PhuKienDangKy pkdk = null;
            foreach (PhuKienDangKy pk in pkDangKyCollection)
            {
                if (pk.MaPhuKien.Trim() == "S10")
                {
                    pkdk = pk; isAdd = false; break;
                }
            }
            if (isAdd)
            {
                pkdk = new PhuKienDangKy();
                pkdk.HopDong_ID = hopdong.ID;
                pkdk.SoPhuKien = txtSoPhuKien.Text.Trim();
                pkdk.NgayPhuKien = ccNgayPhuKien.Value;
                pkdk.MaPhuKien = "S10";
                pkdk.SoTiepNhan = phukien.SoTiepNhan;
                pkdk.TrangThaiXuLy = phukien.TrangThaiXuLy;
                pkdk.NgayTiepNhan = phukien.NgayTiepNhan;
            }
            f.pkdk = pkdk;
            f.isAdd = isAdd;
            f.ShowDialog();
            if (f.isAdd)
            {
                pkDangKyCollection.Add(pkdk);
            }
            dgList.Refetch();
        }
        private void showPKDieuChinhChiTietMaSP(bool isAdd)
        {
            PKChiTietMaSPForm f = new PKChiTietMaSPForm();
            f.hopdong = hopdong;
            PhuKienDangKy pkdk = null;
            foreach (PhuKienDangKy pk in pkDangKyCollection)
            {
                if (pk.MaPhuKien.Trim() == "S13")
                {
                    pkdk = pk; isAdd = false; break;
                }
            }
            PhuKienDangKy pkdkNhomSP = null;
            foreach (PhuKienDangKy pk in pkDangKyCollection)
            {
                if (pk.MaPhuKien.Trim() == "S15")
                {
                    pkdkNhomSP = pk; break;
                }
            }
            if (isAdd)
            {
                pkdk = new PhuKienDangKy();
                pkdk.HopDong_ID = hopdong.ID;
                pkdk.SoPhuKien = txtSoPhuKien.Text.Trim();
                pkdk.NgayPhuKien = ccNgayPhuKien.Value;
                pkdk.MaPhuKien = "S13";
                pkdk.SoTiepNhan = phukien.SoTiepNhan;
                pkdk.TrangThaiXuLy = phukien.TrangThaiXuLy;
                pkdk.NgayTiepNhan = phukien.NgayTiepNhan;
            }
            f.pkdk = pkdk;
            f.isAdd = isAdd;
            f.pkdkNhomSP = pkdkNhomSP;
            f.ShowDialog();
            if (f.isAdd)
            {
                pkDangKyCollection.Add(pkdk);
            }
            dgList.Refetch();
        }
        private void showPKDieuChinhNhomSP(bool isAdd)
        {
            PKBoSungNhomSPForm f = new PKBoSungNhomSPForm();
            f.hopdong = hopdong;
            PhuKienDangKy pkdk = null;
            foreach (PhuKienDangKy pk in pkDangKyCollection)
            {
                if (pk.MaPhuKien.Trim() == "S15")
                {
                    pkdk = pk; isAdd = false; break;
                }
            }
            if (isAdd)
            {
                pkdk = new PhuKienDangKy();
                pkdk.HopDong_ID = hopdong.ID;
                pkdk.SoPhuKien = txtSoPhuKien.Text.Trim();
                pkdk.NgayPhuKien = ccNgayPhuKien.Value;
                pkdk.MaPhuKien = "S15";
                pkdk.SoTiepNhan = phukien.SoTiepNhan;
                pkdk.TrangThaiXuLy = phukien.TrangThaiXuLy;
                pkdk.NgayTiepNhan = phukien.NgayTiepNhan;
            }
            f.pkdk = pkdk;
            f.isAdd = isAdd;
            f.ShowDialog();
            if (isAdd)
            {
                pkDangKyCollection.Add(pkdk);
            }
            dgList.Refetch();
        }
        private void showPKBoSungThietBi(bool isAdd)
        {
            PKBoSungTBForm f = new PKBoSungTBForm();
            Company.BLL.KDT.GC.HopDong hd = new Company.BLL.KDT.GC.HopDong();
            f.hopdong = hopdong;
            PhuKienDangKy pkdk = null;
            foreach (PhuKienDangKy pk in pkDangKyCollection)
            {
                if (pk.MaPhuKien.Trim() == "T07")
                {
                    pkdk = pk; isAdd = false; break;
                }
            }
            if (isAdd)
            {
                pkdk = new PhuKienDangKy();
                pkdk.HopDong_ID = hopdong.ID;
                pkdk.SoPhuKien = txtSoPhuKien.Text.Trim();
                pkdk.NgayPhuKien = ccNgayPhuKien.Value;
                pkdk.MaPhuKien = "T07";
                pkdk.SoTiepNhan = phukien.SoTiepNhan;
                pkdk.TrangThaiXuLy = phukien.TrangThaiXuLy;
                pkdk.NgayTiepNhan = phukien.NgayTiepNhan;
            }
            f.pkdk = pkdk;
            f.isAdd = isAdd;
            f.ShowDialog();
            if (f.isAdd)
            {
                pkDangKyCollection.Add(pkdk);
            }
            dgList.Refetch();
        }
        private void showPKDieuChinhThietBi(bool isAdd)
        {
            PKDieuChinhTBForm f = new PKDieuChinhTBForm();
            f.hopdong = hopdong;
            PhuKienDangKy pkdk = null;
            foreach (PhuKienDangKy pk in pkDangKyCollection)
            {
                if (pk.MaPhuKien.Trim() == "T01")
                {
                    pkdk = pk; isAdd = false; break;
                }
            }
            if (isAdd)
            {
                pkdk = new PhuKienDangKy();
                pkdk.HopDong_ID = hopdong.ID;
                pkdk.SoPhuKien = txtSoPhuKien.Text.Trim();
                pkdk.NgayPhuKien = ccNgayPhuKien.Value;
                pkdk.MaPhuKien = "T01";
                pkdk.SoTiepNhan = phukien.SoTiepNhan;
                pkdk.TrangThaiXuLy = phukien.TrangThaiXuLy;
                pkdk.NgayTiepNhan = phukien.NgayTiepNhan;
            }
            f.pkdk = pkdk;
            f.isAdd = isAdd;
            f.ShowDialog();
            if (f.isAdd)
            {
                pkDangKyCollection.Add(pkdk);
            }
            dgList.Refetch();
        }
        private void dgList_DeletingRecord(object sender, RowActionCancelEventArgs e)
        {
            if (e.Row.RowType == RowType.Record)
            {
                if (ShowMessage("Bạn có muốn xóa phụ kiện này không?", true) == "Yes")
                {                    
                    long id = (long)Convert.ToInt64(e.Row.Cells[3].Text);                    
                    if (id > 0)
                    {
                        PhuKienDangKy.Delete(id);
                    }
                }
                else
                {
                    e.Cancel = true;
                }
            }
        }

        private void Reset()
        {
            pkDangKyCollection.Clear();
            dgList.Refetch();
            txtSoPhuKien.Text = "";
            hopdong = null;
        }
        private void cbHopDong_ValueChanged(object sender, EventArgs e)
        {

            if (pkDangKyCollection.Count > 0)
            {
                foreach (PhuKienDangKy pkdk1 in pkDangKyCollection)
                {
                    if (pkdk1.ID == 0)
                    {
                        DialogResult d = MessageBox.Show("Bạn có muốn lưu lại thông tin đã nhập không", "Lưu thông tin", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information);
                        if (d == DialogResult.Yes)
                        {
                            save();
                            Reset();
                            bindHopDong();
                            hopdong = null;
                            return;
                        }
                        else if (d == DialogResult.No)
                        {
                            Reset();
                            bindHopDong();
                            hopdong = null;
                            return;
                        }
                        else
                        {
                            this.ctrDonViHaiQuan.ValueChanged -= new Company.Interface.Controls.DonViHaiQuanControl.ValueChangedEventHandler(this.ctrDonViHaiQuan_ValueChanged);
                            ctrDonViHaiQuan.Ma = hopdong.MaHaiQuan;
                            this.ctrDonViHaiQuan.ValueChanged += new Company.Interface.Controls.DonViHaiQuanControl.ValueChangedEventHandler(this.ctrDonViHaiQuan_ValueChanged);
                            return;
                        }
                    }
                    foreach (PhuKien pk in pkdk1.PKCollection)
                    {
                        if (pk.ID == 0)
                        {
                            DialogResult d = MessageBox.Show("Bạn có muốn lưu lại thông tin đã nhập không", "Lưu thông tin", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information);
                            if (d == DialogResult.Yes)
                            {
                                save();
                                Reset();
                                bindHopDong();
                                hopdong = null;
                                return;

                            }
                            else if (d == DialogResult.No)
                            {
                                Reset();
                                bindHopDong();
                                hopdong = null;
                                return;
                            }
                            else
                            {
                                cbHopDong.ValueChanged -= new System.EventHandler(this.cbHopDong_ValueChanged);
                                cbHopDong.Value = hopdong.ID;
                                this.cbHopDong.ValueChanged += new System.EventHandler(this.cbHopDong_ValueChanged);
                                return;
                            }
                        }
                    }
                }
            }         
            else
                try
                {
                    hopdong = HopDong.Load((long)Convert.ToInt64(cbHopDong.Value.ToString()));
                }
                catch { hopdong = null; }
        }

        private void ccNgayPhuKien_ValueChanged(object sender, EventArgs e)
        {
            isUpdate = true;
            foreach (PhuKienDangKy p in pkDangKyCollection)
                p.NgayPhuKien = ccNgayPhuKien.Value;
        }

        private void txtSoPhuKien_Leave(object sender, EventArgs e)
        {
            if (EditSoPhuKien()) ;
                //txtSoPhuKien.Focus();
        }

        private void txtSoPhuKien_TextChanged(object sender, EventArgs e)
        {
            this.isUpdate = true;
        }
    }
}
